package com.baichang.taoshunda.service;

import com.baichang.framework.excelption.ServiceException;
import com.baichang.framework.model.Page;
import com.baichang.taoshunda.entity.DeliveryClerk;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2017/8/22 0022.
 */
public interface DeliveryClerkService {
    /**
     * 查询人送人员列表
     *
     * @param name
     * @param lastTime
     * @param created
     * @param cityId
     * @param nowPage
     * @param pageSize @return
     */
    Page queryDispatcherList(String name, String lastTime, String created, Integer cityId, int nowPage, int pageSize);

    /**
     * 查询配送员订单
     *
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page<Map<String, Object>> dispatcherOrder(Integer id, int nowPage, int pageSize);

    /**
     * 查询配送员明细
     *
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page<Map<String, Object>> dispatcherOrderDetails(Integer id, int nowPage, int pageSize);

    /**
     * 根据编号获取配送员信息
     *
     * @param id 编号
     * @return
     */
    DeliveryClerk getDeliveryClerkById(Integer id) throws ServiceException;

    /**
     * 修改配送员信息
     *
     * @param id
     * @param account
     * @param name
     * @param address
     * @param headPic
     * @param provincesId
     * @param cityId
     * @param areaId      @return
     */
    int updateDispatcherInfo(Integer id, String account, String name, String address, String headPic, Integer provincesId, Integer cityId, Integer areaId);

    /**
     * 配送员启用、禁用
     *
     * @param id
     * @param state
     * @return
     */
    int updateState(Integer id, Integer state) throws ServiceException;

    /**
     * 重置配送员密码
     *
     * @param id
     * @param pwd
     * @return
     */
    int resetPassword(Integer id, String pwd);

    /**
     * 配送人员手机号登录
     *
     * @param mobile 手机号
     * @param code   密码
     * @return
     */
    Map<String, Object> mobileMsgLogin(String mobile, String code) throws ServiceException;

    /**
     * 账号登录
     *
     * @param account 账号
     * @param pwd     密码
     * @return
     */
    Map<String, Object> accountLogin(String account, String pwd) throws ServiceException;

    /**
     * 注册
     *
     * @param account         账号
     * @param code            验证码
     * @param pwd             密码
     * @param name            名称
     * @param area            地区
     * @param address         地址
     * @param cityId          城市编号
     * @param identityCardNum 身份证号
     * @param handheldPhotos  手持身份证
     * @param fontCard        身份证正面
     * @param reverseCrad     身份证反面
     */
    Map<String, Object> register(String account, String code, String pwd, String name, String area, String address, Integer cityId, String identityCardNum, String handheldPhotos, String fontCard, String reverseCrad) throws ServiceException;

    /**
     * 忘记密码修改密码
     *
     * @param account 账号
     * @param newPwd  新密码
     * @return
     */
    boolean updateForgetPwd(String account, String newPwd);

    /**
     * 验证密码
     *
     * @param deliveryClerkId 商家编号
     * @param pwd             密码
     * @return
     */
    boolean checkPwd(Integer deliveryClerkId, String pwd) throws ServiceException;

    /**
     * 修改密码
     *
     * @param deliveryClerkId 商家编号
     * @param pwd             密码
     * @param surePwd         确认密码
     * @return
     */
    boolean updatePwd(Integer deliveryClerkId, String pwd, String surePwd) throws ServiceException;

    /**
     * 根据配送员编号获取配送员信息
     *
     * @param deliveryClerkId 配送员编号
     * @return
     */
    Map<String, Object> getDeliveryInfoById(Integer deliveryClerkId) throws ServiceException;


    /**
     * 修改配送员信息
     * 实名认证的名字不能修改
     *
     * @param deliveryClerkId 配送员编号
     * @param headPic         头像
     * @return
     */
    boolean updateInfoById(Integer deliveryClerkId, String headPic, String name) throws ServiceException;

    /**
     * 变更手机号
     * 1.旧手机号获取验证码
     * 2.旧手机号验证验证码
     * 3.新手机号获取验证码
     * 4.新手机号验证验证码
     * 5.修改手机号
     *
     * @param deliveryClerkId 配送员编号
     * @param code            验证码
     * @param phone           新手机号
     * @return
     */
    boolean changePhone(Integer deliveryClerkId, String code, String phone) throws ServiceException;

    /**
     * 实名认证
     *
     * @param deliveryClerkId 配送员编号
     * @param identityCardNum 身份证号
     * @param fontCard        身份证正面
     * @param reverseCrad     身份证反面
     * @param handheldPhotos  手持身份证
     * @return
     */
    boolean realNameAuth(String name, Integer deliveryClerkId, String identityCardNum, String fontCard, String reverseCrad, String handheldPhotos) throws ServiceException;

    /**
     * 根据编号获取账号
     *
     * @param deliveryIds 编号
     * @return
     */
    List<String> getDeliveryClerkAccountsByIds(List<Integer> deliveryIds);

    /**
     * 上传经纬度
     *
     * @param deliveryId 配送员编号
     * @param cityId     城市编号
     * @param lat        纬度
     * @param lng        经度
     * @return
     */
    boolean uploadLatLng(Integer deliveryId, Integer cityId, String lat, String lng);

    /**
     * 查询认证
     * <p>
     * 查询认证
     *
     * @param startCreate
     * @param endCreate
     * @param endTime
     * @param
     * @param cityId
     * @param nowPage
     * @param pageSize    @return
     */
    Page queryAuthentication(String startCreate, String endCreate, String startTime, String endTime, String name, Integer cityId, int nowPage, int pageSize);

    /**
     * 查询未认证
     *
     * @param name
     * @param startCreate
     * @param endCreate
     * @param cityId
     * @param nowPage
     * @param pageSize    @return
     */
    Page queryNoAuthentication(String name, String startCreate, String endCreate, String startTime, String endTime, Integer cityId, int nowPage, int pageSize);

    /**
     * 获取实名认证信息
     *
     * @param id 配送员编号
     * @return
     */
    Map<String, Object> getRealNameAuthInfo(Integer id) throws ServiceException;

    /**
     * 修改是否接单状态
     *
     * @param deliveryId 配送员编号
     * @param isOpen     是否接单
     *                   1：接单
     *                   2：停止接单
     * @return
     */
    boolean updateIsOpen(Integer deliveryId, Integer isOpen) throws ServiceException;

    /**
     * 配送员通过认证
     *
     * @param id
     * @param isCertificate
     * @return
     */
    int throughDispatcher(Integer id, Integer isCertificate);

    /**
     * @param disId
     * @param add
     * @return
     */
    boolean updateDeliverBlance(int disId, BigDecimal add);

    /**
     * 功能描述:
     * 根据配送员编号查询配送配送员保证金信息
     *
     * @param deliveryId 配送员编号
     * @return:
     * @auther: wsl
     * @date: 2019/2/27 13:42
     */
    Map<String, Object> getKetubbah(Integer deliveryId);

    /**
     * 功能描述:
     *
     * @param deliveryId 查询保证金记录
     * @param nowPage
     *@param pageSize @return:
     * @auther: wsl
     * @date: 2019/2/27 19:46
     */
    List<Map<String, Object>> getKetubbahList(Integer deliveryId, Integer nowPage, Integer pageSize);

    /**
     * 功能描述:
     *
     * @param deliveryId 配送员编号
     * @param payBail
     * @param payType
     * @return:
     * @auther: wsl
     * @date: 2019/2/28 9:33
     */
    Map<String, Object> payBail(Integer deliveryId, double payBail, double payType);

    /**
     * 功能描述:
     *
     * @param
     * @return:
     * @auther: wsl
     * @date: 2019/3/2 10:57
     */
    List<Map<String, Object>> findGuide();
}
